package com.sc.userspringboot.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

/**
 * <p>
 * 帖子评论及回复表
 * </p>
 *
 * @author user
 * @since 2025-09-19 06:25:46
 */
@Data
@TableName("comments")
public class Comments {

    /**
     * 评论/回复唯一标识（主键，自增）
     */
    @TableId(value = "comment_id", type = IdType.AUTO)
    private Integer commentId;

    /**
     * 关联帖子ID（帖子删除时同步删除）
     */
    @TableField("post_id")
    private Integer postId;

    /**
     * 评论/回复作者ID
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 评论/回复内容（最多500字）
     */
    @TableField("content")
    private String content;

    /**
     * 自关联外键：NULL=普通评论，具体ID=对该ID的回复
     */
    @TableField("parent_comment_id")
    private Integer parentCommentId;

    /**
     * 被回复的用户ID（仅子级回复有效）
     */
    @TableField("reply_to_user_id")
    private Integer replyToUserId;

    /**
     * 发布时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 是否逻辑删除（0=正常，1=删除）
     */
    @TableField("is_deleted")
    private Byte isDeleted;

    /**
     * 删除操作人（管理员ID，仅删除时填写）
     */
    @TableField("delete_operator")
    private Integer deleteOperator;

    /**
     * 删除时间
     */
    @TableField("delete_time")
    private Date deleteTime;

    /**
     * 删除原因
     */
    @TableField("delete_reason")
    private String deleteReason;

    /**
     * 评论/回复作者信息
     */
    @TableField(exist = false)
    private Users user;

    /**
     * 子评论信息
     * 只忽略序列化，防止无限递归
     */
    @JsonIgnoreProperties({"parentComments", "childComments"})
    @TableField(exist = false)
    private List<Comments> parentComments;


}
